不重启Apache添加删除虚拟主机及二级域名的方法
在linux系统下的配置方法:
首先找到你的apache配置文件httpd.conf
我们打开apache的重写功能,去掉下面这段前面的#号
LoadModule rewrite_module modules/mod_rewrite.so
在 httpd.conf 的最后,添加以下内容:
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:usr/local/etc/apache/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1
其中的 /usr/local/etc/apache 是你的 apache 服务器配置文件所在路径,可根据你的实际情况进行更改。
然后,在这个所在路径的目录下创建一个文件:vhost.map
内容为:
www.a.com /usr/local/www/www_a_com
www.b.com /usr/local/www/www_b_com
www.c.com /usr/local/www/www_c_com
以上部分都是:”域名+空格+绝对路径” 的形式。
最后,在你的网站根目录 /usr/local/www/下,创建对应网站的目录:
www_a_com, www_b_com, www_c_com 等等,理论上可以无限,但是要跟你的配置文件一一对应。
这样,通过浏览器,访问 www.a.com 时,实际上访问的就是 /usr/local/www/www_a_com目录下的文件。
同理,访问 www.b.com 实际上访问的就是 /usr/local/www/www_b_com 目录下的文件。
而且,你可以随时更改 vhost.map 来增加、删除、修改你的网站域名和所指向的实际路径,而不需要重启 apache。
接下来是windows系统下的操作:
1、域名物理地址文件 D:/Apache2.2/conf/vhost.map
内容如下:
www.a.com D:/wwwroot/www_a_com
www.b.com D:/wwwroot/www_b_com
www.c.com D:/wwwroot/www_c_com
2、开启LoadModule rewrite_module modules/mod_rewrite.so
3、域名解析好后
4、把以下配置信息添加到apache配置文件httpd.conf的末尾或者添加到VirtualHost中也行
RewriteLog logs/rewrite.log
RewriteLogLevel 0
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:D:/Apache2.2/conf/vhost.map
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond ${vhost:%1} ^(D:/.*)$
RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}
注意:
a.正则^(.+)$ 要和vhost.map的第一部分匹配,在这个例子中^(.+)$是可以匹配www.a.com的
b.正则^(D:/.*)$要和vhost.map的第二部分匹配,在这个例子中^(D:/.*)$是可以匹配D:/wwwroot/www_a_com的
c.RewriteCond ${vhost:%1} ^(D:/.*)$
把盘符D:加入到正则中,如果您的web文件不是放在D盘而是E盘,要把D:改为E:
这样我们就可以随时更改 vhost.map 文件来增加、删除、修改你的域名和所指向的实际路径,不用重启 apache。
备注:不过目前还有一个问题没有解决,就是安全问题。这样设置目录都是共享的,都有权限。